Understanding Precedence And Associativity In Programming Languages